// 设置导航守卫

// 导入守卫
import router from '@/router'
import store from '@/store'

// 前置守卫
const whitePage = ['/login', '/404']
router.beforeEach(async(to, from, next) => {
  // 判断是否有token
  if (store.state.user.token) {
    // 判断要去的界面是否是登录页，
    // 在有token的情况下，如果要去的界面是登录页，则跳转到首页，
    // 其他情况正常跳转
    // toLwerCase()方法，将字母转换成小写
    if (to.path.toLowerCase() === '/login') {
      next('/')
    } else {
      // 如果去的页面不是登录页
      // 判断是否有用户信息
      // 有则正常通过
      // 没有则需获取用户信息
      if (store.state.user.userInfo.userId) {
        next()
      } else {
        // 没有用户信息
        // 调用vuex中的方法，获取用户信息
        await store.dispatch('user/getUserInfo')
        // 调用获取用户信息成功
        // 跳转到要去的界面，重新走一遍导航守卫
        next(to.fullPath)
      }
    }
  } else {
    // 没有token的情况下，判断要去的界面是否在白名单中
    // 如果在则正常跳转
    // includes()方法，可以判断一个数据是否在数组或字符串中存在，如果存在则返回true，如果不在则返回false
    if (whitePage.includes(to.path.toLowerCase())) {
      next()
    } else {
      // 如果不在则跳转到登录页
      next('/login?redirect=' + to.fullPath)
    }
  }
})
